﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using SystemEXE.SSDBLS.SSDBLS_Common.Logger;
using QLTV.QLTV_Common.Enum;
using QLTV.QLTV_Common.Utils;
using System.Threading;
using QLTV.QLTV_Form.Base;
using QLTV.QLTV_Form.Forms;

namespace QLTV
{
    static class Program
    {
        /// <summary>
        /// アプリケーションのメイン エントリ ポイントです。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Log4NetLogger.Debug(TextUtils.ConcatString(CommonEnum.APPLICATION_NAME.Name, "の起動を開始しました。"));
            Mutex complexApplication = new Mutex(false, CommonEnum.APPLICATION_NAME.Name);

            try
            {
                if (complexApplication.WaitOne(0, false))
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    
                    using (BaseQLTVForm loginForm = new DSP001LoginForm())
                    {
                        if (DialogResult.OK != loginForm.ShowDialog())
                        {
                            return;
                        }
                    }

                    using (BaseQLTVForm splashForm = new DSP003SplashForm())
                    {
                        if (DialogResult.OK != splashForm.ShowDialog())
                        {
                            return;
                        }
                    }

                    Application.Run(new DSP002MainForm());
                }
                else
                {
                    Log4NetLogger.Debug(TextUtils.ConcatString(CommonEnum.APPLICATION_NAME.Name, "が多重起動されました。"));
                    complexApplication.ReleaseMutex();
                    DisplayMessage.ShowErrorMessage(MessageEnum.MSG_E_MULTIPLE_START);
                }
            }
            catch (Exception ex)
            {
                Log4NetLogger.Error(TextUtils.ConcatString(CommonEnum.APPLICATION_NAME.Name, "で例外が発生しました。"), ex);
            }
            finally
            {
                Log4NetLogger.Debug(TextUtils.ConcatString(CommonEnum.APPLICATION_NAME.Name, "が終了しました。"));
            }
        }
    }
}